package com.hmy.finance.common.utils;

import cn.hutool.core.date.DateUtil;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.Objects;

@Slf4j
@UtilityClass
public class FinanceCalculateUtil {
    /**
     * 10点
     */
    private final static LocalTime TEN_AM = LocalTime.of(10, 0);
    /**
     * 15:30
     */
    private final static LocalTime THREE_THIRTY_PM = LocalTime.of(15, 30);

    /**
     * 计算起租当天计租天数
     *
     * @param rentalStartTime the rental end time to calculate termination day
     * @return the calculated termination day
     */
    public static double getRentalStartDay(LocalDateTime rentalStartTime) {
        log.info("[处理时间:{}]-计算退场天数,日期时间:{},本地时间:{}", DateUtil.now(), rentalStartTime, rentalStartTime.toLocalTime());
        //计算租赁天数，如果rentalEndTime在当天10点前，则计租0天；在当天10点到15：30之间，计租0.5天；当前15：30之后，计租1天
        if (rentalStartTime.toLocalTime().isBefore(TEN_AM)) {
            return 1d;
        } else if (rentalStartTime.toLocalTime().isAfter(TEN_AM.minusSeconds(1)) && rentalStartTime.toLocalTime().isBefore(THREE_THIRTY_PM.minusSeconds(1))) {
            return 0.5d;
        } else {
            return 0d;
        }
    }

    /**
     * 计算退场当天计租天数
     *
     * @param rentalEndTime 租赁结束时间
     * @return 退场天数
     * @author songkf
     */
    public static double getRentalTerminationDay(LocalDateTime rentalEndTime) {
        log.info("[处理时间:{}]-计算退场天数,日期时间:{},本地时间:{}", DateUtil.now(), rentalEndTime, rentalEndTime.toLocalTime());
        //计算租赁天数，如果rentalEndTime在当天10点前，则计租0天；在当天10点到15：30之间，计租0.5天；当前15：30之后，计租1天
        if (rentalEndTime.toLocalTime().isBefore(TEN_AM.plusSeconds(1))) {
            return 0d;
        } else if (rentalEndTime.toLocalTime().isAfter(TEN_AM) && rentalEndTime.toLocalTime().isBefore(THREE_THIRTY_PM.plusSeconds(1))) {
            return 0.5d;
        } else {
            return 1d;
        }
    }

    /**
     * 计租天数计算
     */
//    private static double rentalDaysCalculater() {
//        Double rentalDays = 0d;
//
//        double startDay = 1;
//        double endDay = 1;
//        if (calculateStatementDeviceDto.getCurrentRentalStartTime().toLocalDate().isEqual(calculateStatementDeviceDto.getDeviceBeginRentTime().toLocalDate())) {
//            startDay = FinanceCalculateUtil.getRentalStartDay(calculateStatementDeviceDto.getDeviceBeginRentTime());
//        }
//        if (Objects.nonNull(calculateStatementDeviceDto.getDeviceEndRentTime()) && calculateStatementDeviceDto.getCurrentRentalEndTime().toLocalDate().isEqual(calculateStatementDeviceDto.getDeviceEndRentTime().toLocalDate())) {
//            endDay = FinanceCalculateUtil.getRentalTerminationDay(calculateStatementDeviceDto.getCurrentRentalEndTime());
//        }
//        Double chargeDays;
//
//        if (Objects.nonNull(calculateStatementDeviceDto.getDeviceEndRentTime()) && calculateStatementDeviceDto.getDeviceBeginRentTime().toLocalDate().isEqual(calculateStatementDeviceDto.getDeviceEndRentTime().toLocalDate())) {
//            //总天数-头尾2天+当天1天-报停天数
//            chargeDays = new BigDecimal(deviceStatementDetailDto.getTotalDays()).subtract(deviceStatementDetailDto.getChargePauseDays()).doubleValue();
//        } else {
//            //总天数-头尾2天+首天入场计租天数+退场时间计租天数-报停天数
//            chargeDays = new BigDecimal(deviceStatementDetailDto.getTotalDays()).subtract(new BigDecimal(2)).add(new BigDecimal(startDay)).add(new BigDecimal(endDay)).subtract(deviceStatementDetailDto.getChargePauseDays()).doubleValue();
//        }
//
//
//        return rentalDays;
//    }

}
